Apex 為一款筆者近期最喜歡的競技遊戲,想藉著分析的名義,趁機推廣一下這款大逃殺遊戲。由於此遊戲一開始就是以競技類別推出,他本身的牌位系統,很適合延續我們討論到的牌位與配對設計,且遊戲人數基數夠多,勢必必須考量到配對速度的系統問題,最後就讓我們來看看想達到這樣的設計,需要在配對系統上進行的設計有哪些。
簡單介紹一下遊戲機制,遊戲由玩家組成三人小隊,與另外 19組隊伍相殺,直到剩下最後一組小隊時,該小隊即為冠軍小隊。遊玩模式有分成,休閒玩家的一般模式,以及玩家間競技的階級模式。目前公開配對資訊如下:
這邊是我個人猜測可能用到的資訊,這些資訊用來體現一個玩家遊戲能力,符合先前提到 Skill system
計算出的級分與相關資訊,可用協助我們找到實力更為相近的對手或隊友。
顯而易見的,上述這些條件
將被我們於 create ticket 時,事先將玩家過往對戰紀錄
,與當前遊戲選擇(角色、伺服器、指定隊友)
統一放到我們的 ticket 裡。回過頭來看一下 Ticket 裡的 StringArgs
與 DoubleArgs
,雖然在結構設計上,僅是提供我們帶入不同型態的參數,但如果加上資料的理解,可以發現 StringArgs 放的參數偏向硬性條件,像是遊戲模式與使用的伺服器地區,而 DoubleArgs 則是一個會被 MatchProfile 條件區間包含的參數,並且考量到 overlapping 的使用方式,我們在設計 MMF 處理 DoubleArgs 時,會給予每個 DoubleArgs[xxx] 不同的權重,以方便計算出唯一的 quality value 提供 evaulator 評估。
Example ticket
t := &pb.Ticket{
SearchFields: &pb.SearchFields{
StringArgs: map[string]string{
"mode": "3v3_normal_battle_royale", // or 3v3_rank_battle_royale
"server": "Taiwan_GCE2",
"role": "Valk",
"user_name": "wesley",
"user_id": "123456789",
"team_member": `["23456789"]`,
"black_list": `["11009837"]`,
},
DoubleArgs: map[string]float64{
"level": 154,
"rank": 3, // 0~7 the higher better
"team_member_count": 2,
"score": 2880,
"avg_dmg": 312,
"win_streak": 1,
"avg_kd": 0.87,
},
},
}